#ifndef OBJECT_HPP
#define OBJECT_HPP

#include <Eigen/Core>

using BRDF = std::function<Eigen::Vector3f(
    const Eigen::Vector3f &,
    const Eigen::Vector3f &,
    const Eigen::Vector3f &,
    const Eigen::Vector3f &
)>;

struct Object
{
    Eigen::MatrixX3f vertices;
    Eigen::MatrixX3i faces;
    int type;
    BRDF brdf;
    Eigen::Vector3f light_color;

    // get vertices of face (3 column vectors)
    void face_vertices(int face_idx, Eigen::Matrix3f & res_vertices) const;
    // get tangent space of face
    void face_tangent(int face_idx, Eigen::Vector3f & normal, Eigen::Vector3f & up) const;
};

#endif
